a11y: Update the valuetext attribute of GtkProgressBar
authorEmmanuele Bassi <ebassi@gnome.org>
Tue, 28 Jul 2020 12:27:50 +0000 (13:27 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Tue, 28 Jul 2020 15:59:08 +0000 (16:59 +0100)
Since progress bars can have a label, we should propagate that information
to ATs whenever it's set.

gtk/gtkprogressbar.c
testsuite/a11y/progressbar.c

index 08c58ebc5053851ce2bed544f3b7f46fc883a857..0b31b893fffac744113d2159e7b00ecccaa83ecf 100644 (file)
@@ -739,16 +739,16 @@ void
 gtk_progress_bar_set_fraction (GtkProgressBar *pbar,
                                double          fraction)
 {
+  char *text = NULL;
+
   g_return_if_fail (GTK_IS_PROGRESS_BAR (pbar));
 
   pbar->fraction = CLAMP (fraction, 0.0, 1.0);
 
   if (pbar->label)
     {
-      char *text = get_current_text (pbar);
+      text = get_current_text (pbar);
       gtk_label_set_label (GTK_LABEL (pbar->label), text);
-
-      g_free (text);
     }
 
   gtk_progress_bar_set_activity_mode (pbar, FALSE);
@@ -761,6 +761,18 @@ gtk_progress_bar_set_fraction (GtkProgressBar *pbar,
                                   GTK_ACCESSIBLE_PROPERTY_VALUE_NOW, fraction,
                                   -1);
 
+  if (text != NULL)
+    {
+      gtk_accessible_update_property (GTK_ACCESSIBLE (pbar),
+                                      GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT, text,
+                                      -1);
+    }
+  else
+    {
+      gtk_accessible_reset_property (GTK_ACCESSIBLE (pbar), GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT);
+    }
+
+  g_free (text);
 
   g_object_notify_by_pspec (G_OBJECT (pbar), progress_props[PROP_FRACTION]);
 }
index 97f5ef82e725bc3e6d0cc52ef4dc25f1a3f31483..ea6adb16d88cb2e5479619bfa0a96b789f176ae1 100644 (file)
@@ -35,12 +35,15 @@ progress_bar_properties (void)
   gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_MAX, 1.);
   gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_MIN, 0.);
   gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_NOW, 0.);
+  gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT, NULL);
 
   gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (widget), 0.5);
 
   gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_MAX, 1.);
   gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_MIN, 0.);
   gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_NOW, 0.5);
+  gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT, NULL);
+  g_assert_false (gtk_test_accessible_has_property (GTK_ACCESSIBLE (widget), GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT));
 
   g_object_unref (widget);
 }